package com.czk.oom;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

/**
 * 4.GC overhead limit exceeded
 * GC回收之间过长会抛出这个错，过长的定义是：超过98%的时间用来做垃圾回收并且只回收了不到2%的堆内存，连续多次GC都只回收了不到2%的极端情况下才会抛出，
 * 加入不抛出GC overhead limit错误，就会发生下列情况：
 *
 * GC清理的这么点内存很快就会再次被填满，形成恶性循环
 * CPU使用率一直是100%，而GC没有任何效果
 * ————————————————
 * @Author:ChenZhangKun
 * @Date: 2021/7/30 11:54
 */
@RestController
public class GcOverHeadController {
    @GetMapping("/gcOverHead")
    public void gcOverHead() {
        int i = 0;
        List<String> list = new ArrayList<>();
        try {
            while (true) {
                list.add(String.valueOf(++i).intern());
            }
        } catch (Throwable e) {
            System.out.println("i的值为：" + i);
            e.printStackTrace();
            throw e;
        }
    }
}
